package com.chandon.juc.thread_basic;

import com.chandon.juc.SleepThread;

/**
 * interrupt相比较与volatile标志位，while循环中阻塞线程的操作sleep/wait需将InterruptException异常捕获便可正常结束线程。
 * 实际中用的更多，如定时检查interrupt标志位，定次检查interrupt标志位（控制循环次数）
 *
 * 比volatile标志位更优雅些。
 *
 * volatile与interrupt两种方式，适用于不依赖循环中的数据状态，不依赖于需要精确控制时间与数字的场景。
 *
 * 局限性：与volatile标志位一样都是无法精确控制线程打断位置，需要与外部线程配合。
 *
 * @author Dong
 * @version 1.0
 * @date 2021-04-11 17:26
 */

public class T04C_Interrupt_StopThread {

    public static void main(String[] args) {


        Thread t = new Thread(() -> {

            long i = 0l;

            while (!Thread.interrupted()) {
                i++;

//              每次结果都不同：177769  129244 147880无法精确控制在哪个数字上停止
                System.out.println(i);

            }
        });

        t.start();
        SleepThread.sleep(1);
        t.interrupt();


    }
}